有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

即使捕获到控制器上的异常,java Grails Hibernate会话也会被清除。

我发现,如果grails服务出现任何问题并且未捕获异常,hibernate会话将被清除。我有一个用于所有控制器的拦截器,其中我有一个用于数据库事务的方法(这样做是错误的做法)。我的场景是这样的:

在AllInterceptor课堂上:

class AllInterceptor {
boolean before() {

def xyz = getValueFromDomain(session.domain);

def getValueFromDomain(def domain)
    {
        DomainB domainb
        try{
            def domainA = DomainA.findByUrl(domain)
            if (domainA){
                domainb = domainA.dwClient
            }
        }catch(Exception e){
            log.warn("Exception occurred");
            e.printStackTrace();
        }
        return domainb
    }
}
}

在仪表板控制器上:

getChartData(){

    def chartData = chartService.getChartData();
    if(!chartData){
    render (status : 204)
    }else{
    render chartData as JSON;
}}

在chartService:

getChartData(){
def chartData = '';
try{
throw new Exception();
}catch(Exception e){

}
return chartData;
}

在这里,异常已经在服务中捕获,并且在dashboard controller中也没有异常,但是当另一个控制器被调用时,异常会作为org抛出。冬眠HibernateException:在def xyz=getValueFromDomain(Session.domain)处未找到当前线程的会话

在这里,我不明白是什么导致hibernate会话被清除。如果服务中的异常未被捕获并被传播,但异常被捕获,则该异常将被清除。那么为什么要清除hibernate会话呢。请帮忙


共 (0) 个答案